package com.jt.redis;

import redis.clients.jedis.Jedis;

import java.util.Set;

/**
 * 需求：
 * 1）基于用户id进行投票
 * 2）一个用户id只能进行一次投票
 * 3）可以查询投票总数和参与投票的用户id
 * 设计：
 * 1）数据存储结构：set结构（需求为不允许重复）
 */
public class VoteDemo01 {
    /**
     * 检查用户是否投票
     * @param activityId
     * @param userId
     */
    public static Boolean idVote(String activityId, String userId){
        Jedis jedis = JedisDataSource.getConnection();
        Boolean flag = jedis.sismember(activityId, userId);
        jedis.close();
        return flag;
    }

    /**
     * 进行投票操作
     * @param activityId
     * @param userId
     */
    public static void doVote(String activityId, String userId){
        Jedis jedis = JedisDataSource.getConnection();
        jedis.sadd(activityId, userId);
        jedis.close();
    }

    /**
     * 获取投票的总数
     * @param activityId
     */
    public static Long doGetVotes(String activityId){
        Jedis jedis = JedisDataSource.getConnection();

        Long scard = jedis.scard(activityId);
        jedis.close();
        return scard;
    }

    /**
     * 获取投票的用户
     * @param activityId
     */
    public static Set<String> doGetUsers(String activityId){
        Jedis jedis = JedisDataSource.getConnection();

        Set<String> smembers = jedis.smembers(activityId);
        jedis.close();
        return smembers;
    }
    public static void main(String[] args) {
        //1、定义活动id和用户id
        String activityId = "1001";
        String userId = "303";
        //2、进行投票检查
        Boolean flag = idVote(activityId, userId);
        System.out.println("flag= "+flag);
        //3、进行投票
        doVote(activityId, userId);
        //4、获取投票的总数
        Long count = doGetVotes(activityId);
        System.out.println(activityId+"的总投票数为 "+count);
        //5、获取参与投票的用户名
        Set<String> set = doGetUsers(activityId);
        System.out.println("参与"+activityId+"活动的投票用户为"+set);


    }
}
